package com.ftg.learn.chapter09.collection;

import com.ftg.learn.chapter04.Dog;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 树型图
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/8/18 下午1:33
 */
public class LearnTreeMap {

    public static void main(String[] args) {
        // 负数为倒序  升序
        Map<Integer, String> map = new TreeMap<>(Comparator.reverseOrder());
        map.put(90, "张三");
        map.put(100, "张三丰");
        map.put(15, "小李四");
        map.put(89, "王五");

        System.out.println(map);

        map.entrySet().forEach(System.out::println);

//        Set<Integer> sets = new TreeSet<>((x,y)->x.compareTo(y));
        Set<Integer> sets = new TreeSet<>(Comparator.reverseOrder());
        sets.add(21);
        sets.add(23);
        sets.add(12);
        sets.add(256);
        sets.add(27);

        System.out.println(sets);

//        TreeMap

        List<Integer> list = new ArrayList<>(3);
        list.add(2);
        list.add(21);
        list.add(12);
        list.add(32);

        list.sort(Comparator.naturalOrder());

        List<Dog> list1 = new ArrayList<>();
        Dog d1 = new Dog();
        d1.setName("a");
        list1.add(d1);


        Dog d2 = new Dog();
        d2.setName("abc");
        list1.add(d2);

        Dog d3 = new Dog();
        d3.setName("afdafs");
        list1.add(d3);

//        list1.sort((x,y)->x.getName().length() - y.getName().length());
        list1.sort(Comparator.comparingInt(x -> -x.getName().length()));

        System.out.println(list1);


        List<Integer> list2 = new ArrayList<>(3);
        list2.add(1);
        list2.add(2);
        list2.add(3);
        Collections.rotate(list2,2);

//        list2 = Collections.unmodifiableList(list2);
//
//        list2.add(3);
//
//        System.out.println(list2);

        list2 = Collections.synchronizedList(list2);

        if(Objects.isNull(list2)){

        }



//        HashMap 不安全  Hashtable (synchronized [对象同步锁 (方法)] 1 :  大量线程阻塞 2 ： 线程死锁)
//        多  高 （高并发 -- 多线程）


    }

}
